The development of software typically goes through a life cycle that includes a number of stages. These stages are: (1) analysis, (2) design, (3) development, and (4) operation and maintenance. In the analysis stage, the end user and the system analyst work together to determine the data and functional requirements of the software. After this has been accomplished, the system analyst designs the software (design stage) and then a programmer generates the code for the software (development stage). Assuming that the software satisfies the end user's requirements, the software enters the final stage of the cycle, operation and maintenance, where it remains throughout the life of the software.
If the software did not satisfy the end user's requirements or if the end user's requirements subsequently change, the software can be modified to attempt to satisfy the original requirements or to accommodate the changing requirements. Such a modification requires the involvement of the end user, the system analyst, and the programmer. The end user and the system analyst must go back to the analysis stage and determine why the software did not satisfy the original requirements and/or develop new requirements. Once again, the system analyst must design the software (design stage) and the programmer must generate the code for the software (development stage). This process could be repeated an indefinite number of times if there is a continued failure to satisfy the original requirements or if the requirements are continually changing.
As should be apparent from the foregoing discussion, the development of software can be extremely time consuming and expensive. The development cycle requires extensive interaction among the end user, the system analyst, and the programmer. At every stage of the cycle, there is the possibility of miscommunication, and therefore, error in the software. The cycle may have to be repeated an indefinite number of times before the software satisfies the requirements of the end user. Unfortunately, using past methods of developing software, the roles of the end user, the system analyst, and the programmer were critical to the development of the software and could not be eliminated. Applicants therefore believe that a need exists to reduce the complexity of the development cycle of software, particularly database software, preferably by eliminating the roles of the system analyst and the programmer.